using System;
using System.ComponentModel;

namespace App.SolInf.Modelo
{
    public class LineaPresupuesto : INotifyPropertyChanged, ILineaVenta
    {
        public virtual Int32 Id { get; set; }
        private Producto _producto;
        private Double _precioUnitario;
        private Double _cantidad;

        public virtual Producto Producto
        {
            get { return _producto; }
            set
            {
                _producto = value;
                if (value != null && (Id == 0 || PrecioUnitario == 0))
                    PrecioUnitario = value.Precio;
                _propertyChanged("Producto");
            }
        }

        /// <summary>
        /// El vendedor puede modificar el precio del producto
        /// </summary>
        public virtual Double PrecioUnitario
        {
            get { return Math.Round(_precioUnitario,2); }
            set
            {
                _precioUnitario = value;

                _propertyChanged("Subtotal");
                _propertyChanged("PrecioUnitario");
            }
        }

        /// <summary>
        /// Cantidad > 0
        /// </summary>
        public virtual Double Cantidad
        {
            get { return _cantidad; }
            set
            {
                _cantidad = value;

                _propertyChanged("Subtotal");
            }
        }

        /// <summary>
        /// Calcula el subtotal de la linea
        /// </summary>
        public virtual Double Subtotal
        {
            get { return Math.Round(PrecioUnitario*Cantidad, 2); }
        }

        public virtual event PropertyChangedEventHandler PropertyChanged;
        private void _propertyChanged(string property)
        {
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs(property));
        }
    }
}